SPSS SELECT IF 命令教程与示例

By Ruben Geert van den Berg under Basics & SPSS A-Z

快速概览

在 SPSS 中,SELECT IF 命令永久性地从你的数据中移除满足特定条件的个案(行)。

概要

SPSS 中的 SELECT IF 命令基本上意味着“删除所有满足一个或多个条件的个案”。例如,select if(gender = 'female'). 将永久删除所有性别不是女性的个案。现在,让我们使用 bank_clean.sav 文件(部分内容如下所示)来演练一些实际示例。

SPSS Bank Clean 练习数据

示例 1 - 基于 1 个变量的选择

首先,让我们删除所有没有至少本科学位的个案。以下是 语法 (syntax)

  • 检查教育程度的频率分布;
  • 删除不需要的个案;
  • 检查结果。
***在新的输出表中显示值和值标签。**
set tnumbers both.

***运行最小频率表。**
frequencies educ.

***选择具有学士或更高学位的个案。删除所有其他个案。**
select if(educ >= 4).

***重新检查频率。**
frequencies educ.

结果

SPSS Select If For 1 Variable Frequencies

正如我们所看到的,现在我们的数据只包含具有学士、硕士或博士学位的个案。重要的是,在教育程度上具有以下情况的个案也被从数据中删除:

示例 2 - 基于 2 个变量的选择

以下语法根据性别教育程度选择个案:我们只保留数据中至少具有本科学位的女性受访者。

***检查性别和教育程度的列联表。**
crosstabs educ by gender.

***选择具有学士或更高学位的女性。**
select if(gender = 0 & educ >= 4).

***重新检查列联表。**
crosstabs educ by gender.

结果

SPSS Select If For 2 Variables Crosstabs

示例 3 - 基于(非)缺失值的选择

如果你掌握了 SPSS 缺失值函数 (SPSS Missing Values Functions),则基于(非)缺失值的选择非常简单。例如,以下语法显示了两种删除在最后 10 个变量(overall 到 q9)上有效值少于 7 个的个案的选项。

***从最后 10 个问题中选择至少有 7 个非缺失值的个案。**
select if(nvalid(overall to q9) >= 7). /*至少 7 个有效值或最多 3 个缺失值。*/
execute.

***另一种方式,结果完全相同。**
select if(nmiss(overall to q9) < 4). /*少于 4 个缺失值或多于 6 个有效值。*/
execute.

技巧 1 - 删除前检查选择

在删除个案之前,我有时想快速查看它们。一个好的方法是创建一个 FILTER (FILTER) 变量。以下语法显示了正确的方法。

***创建只包含零的筛选变量。**
compute filt_1 = 0.

***将筛选变量设置为 1,以表示我们希望保留在数据中的个案。**
if(nvalid(overall to q9) >= 7) filt_1 = 1.

***将未选中的个案移动到数据集的底部。**
sort cases by filt_1 (d).

***现在滚动到数据集的底部。请注意,个案 459 - 464 将被删除,因为它们在 filt_1 上有 0。**
***如果选择符合预期,则删除其他个案。**
select if(filt_1).
execute.

快速说明:select if(filt_1).select if(filt_1 <> 0). 的简写,并删除在 filt_1 上具有零或缺失值的个案。

结果

SPSS Inspect Case Selection Before Deletion 将被删除的个案位于我们数据的底部。我们也很容易看到,在执行此操作后,我们将剩下 458 个个案。

技巧 2 - 使用 TEMPORARY

我想提到的最后一个技巧是将 SELECT IFTEMPORARY 结合使用。这样做,SELECT IF 仅适用于随后的第一个过程。例如,比较以下第一个和第二个 FREQUENCIES (FREQUENCIES) 命令的结果。

***确保个案删除仅适用于第一个过程。**
temporary.

***仅选择女性个案。**
select if(gender = 0).

***现在任何过程都只使用女性个案。这也反转了个案选择。**
frequencies gender educ.

***重新运行频率现在再次使用数据中的所有个案。**
frequencies gender educ.

最终说明

首先,语法中条件周围的括号不是必需的。因此,select if(gender = 0). 也可以写成 select if gender = 0.。我曾经认为较短的语法总是更好,但这些年来我改变了我的想法。可读性和清晰的结构也很重要。因此,我使用(并推荐)条件周围的括号。这也适用于 IF (IF)DO IF (DO IF)

好吧,我想这应该可以了。我错过了什么吗?请在下面留言告诉我。

感谢阅读!